"""
1. 多态： 不同的 子类对象 调用相同的 父类方法， 产生不同的执行结果（多种形态）
2. 注意：
    - Python是弱类型语言(动态语言)， 在代码中多态体现不够明显，因为看不到非多态的情况
    - 在自动化测试脚本几乎应用不到， 了解多态即可

需求：
1. 在 Dog 类中封装方法 game
    – 普通狗只是简单的玩耍
2. 定义 XiaoTianDog 继承自 Dog， 并且重写 game 方法
    – 哮天犬需要在天上玩耍
3. 定义 Person 类， 并且封装一个 和狗玩 的方法
    – 在方法内部， 直接让 狗对象 调用 game 方法
4. 实例化对象，调用方法，验证结果
"""


class Dog(object):
    def __init__(self, name='狗'):
        # self = xtq, name = '旺财'
        print('Dog的__init__')
        self.name = name

    def game(self):
        print(f'{self.name}简单的玩耍')


class XTD(Dog):
    """继承于Dog"""
    def game(self):
        # self = temp = xtq
        print(f'{self.name}在天上玩耍')


class Person(object):
    def __init__(self, name):
        # self = p, name = 'mike'
        print('Person的__init__')
        self.name = name

    def play_with_dog(self, temp):
        # self = p, temp = xtq
        print(f'{self.name}在和{temp.name}玩耍')
        temp.game()

# 实例化Person对象
p = Person('mike')
# 实例化狗对象
xtq = XTD('旺财')
p.play_with_dog(xtq)